| Автор перевода: Майкл "Antares" Клишин | Предыдущая | Следующая | Оглавление |
Flash Player 6.
myObject.watch(prop:String,callback:Function[,userData:Object] ): Boolean
prop Строка; имя свойства, которое должно отслеживаться.
callback Функция, вызываемая, когда отслеживаемое свойство изменяется. Это должна быть переменная, хранящая ссылку на объект класса Function, а не просто имя функции. Синтаксис callback таков: callback(prop, oldVal, newVal, userData).
userData Необязательные данные, которые будут переданы функции callback в качестве параметров. Если параметр userData опущен, функции callback передается undefined . Данный параметр необязателен.
Булева величина: true если отслеживание начато, в противном случае false.
Метод; регистрирует обработчик события, вызываемый в случае, когда свойство объекта изменяется. При этом myObject считается объектом, которому принадлежит функция-обработчик.
Вы можете использовать оператор return в функции callback, чтобы воздействовать на значение отслеживаемого свойства. Значение, возвращаемое функцией callback, присваивается отслеживаемому свойству. Значение, которое Вы хотите вернуть, зависит от того, что Вы отслеживаете, как выхотите изменить свойство или же наоборот, защитить от изменения:
newVal.oldVal.Если функция callback, которую Вы определили, не имеет оператора return, отслеживаемому свойству будет присвоено значение undefined.
Отслеживающий объект (watchpoint) может фильтровать (или предотвращать) присвоение нового значения, путем возврата измененного свойство newval (или oldval). Если Вы удалите отслеживаемое свойство, отслеживающий объект не исчезнет. Если в будущем Вы создадите свойство с тем же именем, он все еще будет работать. Для удаления отслеживающего объекта, используйте метод Object.unwatch.
За каждым свойством может "наблюдать" только один отслеживающий объект . Повторные вызовы Object.watch() для того же самого свойства заменяют предыдущие отслеживающие объекты.
Метод Object.watch() ведет себя подобно функции Object.watch() в JavaScript 1.2 и более поздних весиях. Основное различие состоит в параметре userData, который является нововведением Flash, не поддерживаемым Netscape Navigator. Вы можете передать параметр userData обработчику события и использовать его.
Метод Object.watch() не может отслеживать getter/setter свойства. Getter/setter свойства работают путем отложенных вычислений значений — значение свойства неизвестно до тех пор, пока свойство не опрошено. Отложенные вычисления часто эффективны, потому что свойство не обновляется постоянно; чаще оно опрашивается лишь изредка. Однако, Object.watch() должен получить значение свойства для определения момента вызова фунции callback. Для работы с getter/setter свойствами Object.watch() вынужден получать значение свойства постоянно, что неэффективно.
В большинстве своем, предопределенные ActionScript свойства, подобно _x, _y, _width и _height являются getter/setter свойствами и не могут отслеживаться при помощи Object.watch().
В примере ниже используется метод watch() дял проверки, не превышает ли значение свойства speed заданного лимита :
// Создаем new object
var myObject:Object = new Object();
// Добавляем свойство для отслеживания скорости
myObject.speed = 0;
// Описываем функцию, которая будет вызываться при изменении свойства
var speedWatcher:Function = function(prop, oldVal, newVal, speedLimit) {
// Проверяем, не привышен ли предел
if (newVal > speedLimit) {
trace ("Вы превышаете.");
}
else {
trace ("Вы не превышаете.");
}
// Возвращаем значение newVal.
return newVal;
}
// Используем watch() для регистрации обработчика событий, передавая в качестве параметров:
// - имя отслеживаемого свойства: "speed"
// - ссылку на функцию speedWatcher
// - переменную speedLimit, имеющую значение 55 в качестве параметра userData
myObject.watch("speed", speedWatcher, 55);
// Делаем свойство speed равным 54, а затем 57
myObject.speed = 54; // Выведет: Вы не превышаете.
myObject.speed = 57; // Выведет: Вы превышаете.
// Прекращаем отслеживание свойства
myObject.unwatch("speed");
myObject.speed = 54; // Не выведет ничего
Object.addСвойство(),Object.unwatch()
| Смотреть комментарии LiveDocs | Предыдущая | Следующая | Оглавление | |